#!/usr/bin/env python3

'''
property 是一种特殊的 attribute
带有 __get__ 、__set__ 、__delete__ 其中之一
和 attribute 不同的是，获得 property 不是直接拿到，是拿到 __get__ 的返回值
'''


class Student(object):
    def __init__(self):
        self._age = 10

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        print(f'age:{age}')
        if age < 0:
            raise ValueError("age is Illegal")
        self._age = age

    @age.deleter
    def age(self):
        del self._age

    @property
    def height(self):
        return 185


s = Student()
del s.age
# s.age = -10  # ValueError: age is Illegal
s.age = 10
print(s.age)  # 10


# s.height = 200  # AttributeError: can't set attribute

# print(dir(s))  # 显示类实例的属性、变量等信息
# print(vars(s))  # 显示类实例里面的变量，这里是 _age，但是已经被 del 了，所有显示为空
